// 定义组合式API仓库
import { defineStore } from 'pinia'
import { getPrefixName } from '@/config'
import type { userInfoIntXcx, loginResIntXcx, phoneKeyIntXcx } from '@/apis/login/types'
import { loginApiXcx, editPhoneApi } from '@/apis/login'
import useTabbarInfo from '@/store/tabbar'
const tabbarInfo = useTabbarInfo()
interface userInfoStoreInt {
    token?: string
    user: any
}

// 创建小仓库
export default defineStore(
    getPrefixName('user'),
    () => {
        const userInfo = ref<userInfoStoreInt>({
            token: '',
            user: {}
        })
        const token = computed(() => {
            return userInfo.value.token || 'token'
        })
        const user = computed(() => {
            return userInfo.value.user
        })
        // 登录
        function login(params: userInfoIntXcx) {
            return new Promise<any>((resolve, reject) => {
                loginApiXcx(params)
                    .then((res: loginResIntXcx) => {
                        console.log(res, '22222')

                        if (res.data.token && res.data.user.mobile) {
                            userInfo.value = res.data
                            resolve({ code: 1, message: '登录成功~' })
                        } else {
                            resolve({ ...res, code: 0 })
                        }
                    })
                    .catch((err) => {
                        reject(err)
                    })
            })
        }
        // 手机号补全
        function authorizePhone(params: phoneKeyIntXcx) {
            return new Promise<any>((resolve, reject) => {
                editPhoneApi(params)
                    .then((res: loginResIntXcx) => {
                        if (res.data.token) {
                            userInfo.value = res.data
                            resolve({ code: 1, message: '登录成功~' })
                        } else {
                            reject({ code: 0, message: '登录失败~' })
                        }
                    })
                    .catch((err) => {
                        reject(err)
                    })
            })
        }

        // 退出登录
        function logOut() {
            uni.showToast({
                icon: 'none',
                title: '退出成功',
                mask: true,
                success() {
                    setTimeout(() => {
                        userInfo.value = {
                            token: '',
                            user: {}
                        }
                        uni.clearStorageSync()
                        tabbarInfo.tabbarChangeIndex()
                        uni.goToPage({
                            url: 'pages/index/index',
                            mode: 'reLaunch'
                        })
                    }, 2000)
                }
            })
        }
        return {
            token,
            user,
            userInfo,
            logOut,
            login,
            authorizePhone
        }
    },
    {
        unistorage: {
            serializer: {
                // 序列化，默认为 JSON.stringify
                serialize(v) {
                    return JSON.stringify(v)
                },
                // 反序列化，默认为 JSON.parse
                deserialize(v) {
                    return JSON.parse(v)
                }
            }
        } // 开启后对 state 的数据读写都将持久化
        // unistorage: {
        //     key: 'userInfo', // 缓存的键，默认为该 store 的 id，这里是 main,
        //     paths: ['userInfo.token'], // 需要缓存的路径，这里设置 foo 和 nested 下的 data 会被缓存
        //     // 初始化恢复前触发
        //     beforeRestore(ctx: any) {
        //         console.log(ctx)
        //     },
        //     // 初始化恢复后触发
        //     afterRestore(ctx: any) {
        //         console.log('ctx', ctx)
        //     },

        // },
    }
)
